自动化
脚本中的Entrez命令
冒险尝试进入编程领域时,可以在需要独立处理一个步骤的每个输出行时编写shell脚本,而不是将输出完整地传输到下一个命令。 (最简单的shell脚本只是一组命令的副本,这些命令被输入到终端中以供执行。)
在脚本中,可以通过将语句括在反引号(“`”)字符中来将变量设置为命令的结果。变量名称以美元符号(“$”)作为前缀,以将其值用作另一个命令中的参数。注释以井号(“#”)开头并被忽略。引用字符串中的引号通过反斜杠(“\”)“转义”输入。子例程可用于收集公共代码或简化脚本的组织。
例如,执行包含以下内容的脚本文件:
|
|
将获得Entrez数据库列表:
|
|
然后为每个单独的数据库返回索引搜索字段的缩写,名称和描述:
|
|
shell脚本命令:
|
|
在循环中的步骤之间添加一秒延迟,并可用于帮助防止高级脚本过度使用Entrez服务器。
Xargs/Sh Loop
通过创造性地使用UNIX xargs和sh命令,有时可以避免编写脚本来循环遍历数据。在“sh -c”命令字符串中,姓氏和首字母参数(由“xargs -n 2”成对传递)在“$0”和“$1”变量中替换。sh字符串中的所有命令都在每个名称上单独运行:
|
|
这会为每位作者生成PubMed文章计数:
|
|
While Loop
“while”循环也可用于独立处理数据行。给定一个包含genus-species名称的文件“organisms.txt”,UNIX“cat”命令:
|
|
写入文件的内容:
|
|
这可以通过管道连接到一次读取一行的循环:
|
|
查找每个生物的分类学姓氏和BLAST分部:
|
|
(“</dev/null”输入重定向构造阻止esearch从stdin“排空”剩余的行。)
For Loop
嵌入“for”循环的生物体名称可以获得相同的结果:
|
|
File Exploration
for循环也可用于浏览计算机的文件系统:
|
|
访问当前目录中的每个文件。星号(“”)字符表示所有文件,可以用任何模式(例如“.txt”)替换以限制文件搜索。 if语句“-f”运算符可以更改为“-d”以查找目录而不是文件,“ -s”选择大小大于零的文件。
Processing in Groups
由于Entrez链接服务器中的技术限制,可能需要使用将唯一标识符或序列登录号拆分为较小组的函数对大量记录执行elink操作:
|
|
以下示例将一次处理200个加入的组中的序列记录:
|
|